﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Binding {
    /// <summary>0
    /// Lógica de interacción para MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window {
        System.ComponentModel.ICollectionView v;
        public MainWindow() {
            InitializeComponent();
            Cola c = new Cola();
            G1.DataContext = c.personas;
        v= CollectionViewSource.GetDefaultView(c.personas);
        v.SortDescriptions.Add(new System.ComponentModel.SortDescription("Nombre", System.ComponentModel.ListSortDirection.Descending));
        v.GroupDescriptions.Add(new PropertyGroupDescription("Direccion"));
        v.Filter = new Predicate<object>(filtro);
        }

        private void Button_Click(object sender, RoutedEventArgs e) {
         // Persona P = (Persona)G1.FindResource("persona");
         // MessageBox.Show(P.Nombre + "  " + P.Telefono + "   " + P.Direccion);
            v.MoveCurrentToNext();
        }

        public bool filtro(Object obj) {
            Persona p = (Persona)obj;
            return p.Monto <= 300;
        }
    }

   public  class Persona {
        private String _Nombre;
        private String _Direccion;
        private String _Telefono;
        private double _Monto;

        public Persona() {
          
        }

        public String Nombre {
            get { return _Nombre; }
            set { _Nombre = value; }
        }

        public String Telefono {
            get { return _Telefono; }
            set { _Telefono = value; }
        }

        public String Direccion {
            get { return _Direccion; }
            set { _Direccion = value; }
        }

        public Double Monto{
            get { return _Monto; }
            set { _Monto = value; }
        }

        public String saludo() {
            return "ESTE ES MI SALUDO";
        }
    }

   public class Cola {
       List<Persona> pl = new List<Persona>();
       Persona p;
       public Cola() {

           p = new Persona();
           p.Nombre = "pedro";
           p.Telefono = "5566989";
           p.Direccion = "Direccion uno";
           p.Monto = 200;
           pl.Add(p);

           p = new Persona();
           p.Nombre = "juan";
           p.Telefono = "5566989";
           p.Direccion = "Direccion uno";
           p.Monto = 200;
           pl.Add(p);
           p = new Persona();
           p.Nombre = "yuris";
           p.Telefono = "5566989";
           p.Direccion = "Direccion uno";
           p.Monto = 200;
           pl.Add(p);
           p = new Persona();
           p.Nombre = "dunia";
           p.Telefono = "5566989";
           p.Direccion = "Direccion uno";
           p.Monto = 200;
           pl.Add(p);

           p = new Persona();
           p.Nombre = "maria";
           p.Telefono = "448831";
           p.Direccion = "Direccion dos";
           p.Monto = 200;
           pl.Add(p);

           p = new Persona();
           p.Nombre = "dumary";
           p.Telefono = "448831";
           p.Direccion = "Direccion dos";
           p.Monto = 200;
           pl.Add(p);
           p = new Persona();
           p.Nombre = "maribel";
           p.Telefono = "448831";
           p.Direccion = "Direccion dos";
           p.Monto = 500;
           pl.Add(p);
           p = new Persona();
           p.Nombre = "graciela";
           p.Telefono = "448831";
           p.Direccion = "Direccion dos";
           p.Monto = 400;
           pl.Add(p);
           
           p = new Persona();
           p.Nombre = "richard";
           p.Telefono = "4418831";
           p.Direccion = "direccion tres";
           p.Monto = 100;
           pl.Add(p);

           p = new Persona();
           p.Nombre = "jose";
           p.Telefono = "4418831";
           p.Direccion = "direccion tres";
           p.Monto = 200;
           pl.Add(p);

                
           
       }

       public List<Persona> personas{
           get { return pl;}
   }

   }
    
   public class Conv : IValueConverter {

       object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
           return value.ToString() + "(AGREGADO POR EL CONVER)";
       }

       object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
           String aux;
           int i=value.ToString().LastIndexOf('(');
           if (i != -1)
               aux = value.ToString().Substring(0, i - 1);
           else
               aux = value.ToString();
           return aux;
       }
   }

   public class MConv : IMultiValueConverter {


       object IMultiValueConverter.Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
           if (values[0].ToString() == "jose") {
               if (values[1].ToString() == "1452") {
                   return new SolidColorBrush(Colors.Red);
               }
           }
           return null;
       }

       object[] IMultiValueConverter.ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) {
           throw new NotImplementedException();
       }
   }

   public class Selector : DataTemplateSelector {
       public override DataTemplate SelectTemplate(object item, DependencyObject container) {
          Persona pp = (Persona)item;
          ContentPresenter c=(ContentPresenter)container;
          if (pp.Nombre == "jose") {
              return (DataTemplate)c.FindResource("t1");
        }else
              return (DataTemplate)c.FindResource("t2");
       }
   }

   
}
